<!DOCTYPE html>
<html lang="en" >
<head>
    <meta charset="UTF-8">
    <title>000HelloWorld</title>
    <style>
        #app > span {
            display: block;
        }
    </style>
</head>

<body>
<div id="app">

    <button @click="greet">greet</button>
    <!--有时也需要在内联语句处理器中访问原生 DOM 事件。
    可以用特殊变量 $event 把它传入方法：-->
    <div>
        <input type="text" v-model="msg" name="" id="" value="Hello">
        <button @click="greet(msg,$event)">greet msg</button>
    </div>
    <button @click="greet">greet</button>


    <!--在事件处理器中经常需要调用
    event.preventDefault() 或 event.stopPropagation()。
    尽管我们在方法内可以轻松做到，不过让方法是纯粹的数据逻辑而不处理 DOM 事件细节会更好。-->
    <!--为了解决这个问题，Vue.js 为 v-on 提供两个 事件修饰符：
    .prevent 与 .stop。你是否还记得修饰符是点号打头的指令后缀？-->

    <!-- 阻止单击事件冒泡 -->
    <!--<a v-on:click.stop="doThis"></a>-->
    <!-- 提交事件不再重载页面 -->
    <!--<form v-on:submit.prevent="onSubmit"></form>-->
    <!-- 修饰符可以串联 -->
    <!--<a v-on:click.stop.prevent="doThat">-->
    <!-- 只有修饰符 -->
    <!--<form v-on:submit.prevent></form>-->

    <!--1.0.16 添加了两个额外的修饰符-->
    <!-- 添加事件侦听器时使用 capture 模式 -->
    <!--<div v-on:click.capture="doThis">...</div>-->
    <!-- 只当事件在该元素本身（而不是子元素）触发时触发回调 -->
    <!--<div v-on:click.self="doThat">...</div>-->
    <!--全部的按键别名：
        enter
        tab
        delete
        esc
        space
        up
        down
        left
        right

        1.0.17+： 可以自定义按键别名：
        可以使用 @keyup.f1
        Vue.directive('on').keyCodes.f1 = 112
    -->
    <form action="" @submit.prevent="submit">
        <input type="text" name="" @keyup="checkInput" @keyup.enter="">
        <input type="submit" value="提交">
        <span>keyCode:{{keyCode}}</span>
    </form>


</div>

</body>
<script src="../vendor/vue1.0.26.js"></script>
<script>
    var vm = new Vue({
        el: "#app",
        data: {
            msg: "",
            keyCode: 0
        },
        methods: {
            greet: function (msg, event) {
                console.log(msg, event)
                //msg is MouseEvent or user arg
                alert(msg instanceof MouseEvent ? "Hello" : msg)
            },
            submit: function () {
                alert("submit")
            },
            checkInput: function (event) {
                this.keyCode = event.keyCode
            }
        }
    })

    /*你可能注意到这种事件监听的方式违背了传统理念 “separation of concern”。不必担心，因为所有的 Vue.js 事件处理方法和表达式都严格绑定在当前视图的 ViewModel 上，它不会导致任何维护困难。实际上，使用 v-on 有几个好处：

    扫一眼 HTML 模板便能轻松定位在 JavaScript 代码里对应的方法。

    因为你无须在 JavaScript 里手动绑定事件，你的 ViewModel 代码可以是非常纯粹的逻辑，和 DOM 完全解耦，更易于测试。

    当一个 ViewModel 被销毁时，所有的事件处理器都会自动被删除。你无须担心如何自己清理它们。*/
</script>

</html>